Deployed 7 Sep 2026, 00:55 MUT
{{ storeNameUpper }}
{{ store.address }}
{{ storeMetaLine }}
VAT {{ store.vatNo }}
{{ activeTable }} · {{ nowLabel }} · Devi
{{ l.qty }}× {{ l.name }}{{ l.receiptNote }}{{ l.lineTotal }}
Service 10%{{ serviceLabel }}
Tip{{ tipLabel }}
VAT 15% (incl.){{ vatInclLabel }}
Kibaz vouchers
{{ a.name }}{{ a.amtLabel }}
TOTAL{{ totalLabel }}
Fiscal invoice {{ fiscalNo }}
MRA e-invoice · IRN {{ fiscalIrn }}
Rate your meal → {{ voucherLabel }}
{{ qrEl }}
Scan to save tonight's dinner
& rate for a voucher · kibaz.mu/claim
{{ store.footer }} · powered by Kibaz
{{ screenCode }}
{{ nowLabel }} ▮▮▮ ⌃ 84%
Offline · orders queuing on this terminal
Internet down · the till keeps working — menu, prices & loyalty rules are cached on this device. QR ordering is paused at tables; take orders here. Receipts print with IRN pending and file to the MRA when the line is back.
Front counter printer P1 is down — settling is paused (a fiscal receipt is required by law). Ordering & kitchen tickets unaffected. Check paper & power, or move P1's role to another printer in Settings → Printers.
Syncing the venue record to this terminal…
Quiet board — for now

Stick the table QRs and this board fills itself: tables appear when diners scan, takeaways when they order ahead. Nothing to accept, nothing to configure.

Print table QRs ›
Today {{ nowDateLabel }} · {{ nowLabel }}
{{ t }}
{{ r.table }}{{ r.cap }}
{{ b.label }}
Tap a slot to add
Needs you {{ nowCount }}
{{ boardHeadOrder }}StatusPaxQtyRsTime
{{ x.refLabel }}
{{ x.statusShort }}
{{ x.paxLabel }} {{ x.qtyLabel }} {{ x.amtLabel }}
{{ x.clockLabel }}
Running {{ runningCount }}
{{ boardHeadOrder }}StatusPaxQtyRsTime
{{ x.refLabel }}
{{ x.statusShort }}
{{ x.paxLabel }} {{ x.qtyLabel }} {{ x.amtLabel }}
{{ x.clockLabel }}
Kitchen closed · guest ordering off
{{ pauseReasonLabel }}
Reopen
Messages
{{ m.who }}
{{ m.text }}
{{ m.time }}

Ready times and running-late notes send themselves. Only a guest's own message is unread.

Kitchen is closed
Guests can't order · the till still can — drinks, coffee, takeaway. Reason optional, diners see it.
New order
What kind of order is this?
New table
Step 1 · choose an area
Seat a table
{{ freeCount }} free · tap more than one for a big group
{{ z.name }}
{{ orderHeadTitle }}
{{ orderHeadSub }}
{{ orderHeadPill }}
{{ sentSummary }}
{{ it.name }}{{ it.dinerTag }}{{ it.priceLabel }}
{{ it.qty }} × {{ it.qty }}
{{ it.lineTotal }}
{{ it.avoidLabel }}
Clash \u00b7 {{ it.containsLabel }} \u2014 check with the kitchen
✎ {{ it.noteText }}
{{ it.voidNote }}
Nothing yet — add dishes below.
{{ r.totalCaption }} {{ r.totalLabel }}
Going to the kitchen on its own · {{ fireCountdown }}
Held back — the kitchen hasn't seen this round
{{ menuSheetTitle }}
{{ menuSheetSub }}
Who are you adding for?

Dishes you add go to this person's part of the bill.

Who is it for?
Jump to a section

{{ sec.label }}

{{ sec.countLabel }}
{{ m.name }}
{{ m.priceLabel }} Finished {{ m.crownLabel }}
{{ m.desc }}
{{ diName }}
{{ diPriceLabel }}
Finished tonight
Dietary needs travel as notes to the kitchen — Kibaz makes no dietary promises.
{{ dinerName }}'s vouchers
− {{ checkoutSavedLabel }}
Used on this bill
{{ v.name }}
{{ v.terms }}
{{ v.effect }}
Stayed in the wallet
{{ v.name }}
{{ v.whyNot }}

Kibaz never takes more than {{ capPctLabel }} off a bill — {{ capAmtLabel }} here. Anything not used stays in the diner's wallet.

Can't do {{ declineWho }}'s order
{{ declineWhat }}
Why it stopped here
{{ b.label }}
{{ b.detail }}
What do we tell them?
Offer something insteadBetter than a flat no — they pick from what you do have tonight.
Their money
{{ declineMoney }}
Move {{ activeTable }} to

The whole order goes with them — sent rounds included.

✎
Note · {{ noteName }}
Prints on the kitchen ticket
Applies to {{ noteApplyQty }} of {{ noteLineQty }}
The line splits — the rest stays as-is
{{ noteApplyQty }}
Cancel {{ voidName }}
Already sent to kitchen · {{ activeTable }}
How many to cancel? {{ voidQty }}
Why?
Has the kitchen started it?
Final bill · {{ activeTable }}
Check it with the table before closing.
{{ l.qty }}× {{ l.name }}✎ {{ l.noteText }} {{ l.lineTotal }}
Subtotal{{ subtotalLabel }}
Service 10%{{ serviceLabel }}
Tip · from the app{{ tipLabel }}
VAT 15% (included){{ vatInclLabel }}
{{ dinerInitial }}
{{ dinerName }} · Kibaz wallet
{{ dinerTag }}
{{ vouchSummary }}
{{ vouchSub }}
Table pays{{ totalLabel }}
Bill was {{ grossTotalLabel }}Saved {{ checkoutSavedLabel }}
Rate after → {{ voucherLabel }}
How are they paying?
{{ activeTable }} · {{ payDueLabel }} outstanding
Taking now {{ payTakingLabel }}
{{ payRemainLabel }}
Scan to pay · {{ activeTable }}
Turn the screen to the diner — any wallet works.
{{ qrBig }}
{{ totalLabel }}
Waiting for the scan…
Confirms by itself the moment the wallet authorises.
Cash · {{ activeTable }}
Count it, then confirm. Nothing is recorded until you do.
On the bill {{ cashTakingLabel }}
Take in cash {{ cashRoundedLabel }}
{{ payRoundLabel }}
{{ payConfirmLabel }}
Send their receipt & voucher
Rating tonight unlocks {{ voucherLabel }}. Capture a number to WhatsApp the receipt + claim, or just print the claim QR. This links the table to Kibaz.
+230
✅ Diner agreed to receive their receipt & offers on WhatsApp (opt-in at the till).
{{ sentIcon }}
{{ sentTitle }}
{{ sentBody }}
Paid{{ totalLabel }} · {{ payConfirmLabel }}
Fiscal invoice{{ fiscalNo }} · MRA
Rate to unlock{{ voucherLabel }}
Dinner saved{{ itemCountLabel }}
{{ g.label }} ask a manager
{{ boardAct.rTitle.l }} {{ boardAct.rTitle.r }}
{{ hd.l }} {{ hd.r }}
{{ l.roundLabel }} {{ l.roundWhen }}
{{ l.qty }} {{ l.qtyLabel }} {{ l.name }}{{ l.whoLabel }} {{ l.noteLabel }} {{ l.wasNote }} Rs {{ l.lineTotal }}
Discount − Rs {{ discLabel }}
Total{{ boardAct.total }}
{{ boardAct.rFootLabel }} {{ boardAct.rFoot }} {{ boardAct.rFoot }} {{ boardAct.rFoot }}
Messages
{{ mg.by }} {{ mg.time }} {{ mg.text }}
Status {{ boardAct.rBlock }}
Running late
Cancel which dish?
Off this bill only — the menu is untouched.
Merge into which table?
{{ mergeFromLabel }} folds in — every line and who ordered it is kept, one bill.
{{ moneyTitle }}
{{ moneySub }}
Why
Signed {{ moneyBy }} · goes in the audit log.
{{ etaPickHead }}
{{ etaPickName }} is told to come at this time.
Snooze for how long?
Bumps it off the board, then back. The guest is told it's running late.
How are they paying?
{{ payPickName }} · {{ payPickTotal }} · paid first, then handed over
{{ qrBig }}
Waiting for the scan…
Confirms & hands over by itself when the wallet authorises.
Message {{ pingWho }}
Type a quick note — sent to them on WhatsApp.
Which item is out of stock?
The guest gets a WhatsApp naming that exact item, asking to swap or refund it.
Out of stock · {{ stockSelName }}
Refund to guest{{ stockSelRefund }}
If the guest paid, we will refund them to their original payment method.
{{ stockSelName }} will be disabled on the menu until re-enabled manually.
Bookings
{{ bkShowup }} show-up · {{ bkToConfirm }} to confirm
Tap a slot to add Confirmed Requested Seated
{{ t }}
{{ r.table }}{{ r.cap }}
{{ b.label }}
One row per table · block = booking, held for its session.
{{ ss.label }} {{ ss.hint }} {{ ss.count }} bookings · {{ ss.covers }} covers
{{ b.mono }}
{{ b.who }}
{{ b.party }} · {{ b.time }} · {{ b.note }}
{{ b.status }}
Settings
Sea Folks · venue setup
Print
This terminal
Locks after 90 s idle.
All orders
Sea Folks · {{ ordTotalCount }} today
RefOrderQtyPayRsTime
{{ o.ref }} {{ o.table }}{{ o.typeLabel }} {{ o.qty }} {{ o.method }} {{ o.total }} {{ o.time }}
{{ ordTotalCount }} orders{{ ordTotal }}
{{ odRef }} {{ odWho }}
{{ r.k }} {{ r.v }}
Total {{ odTotal }}
Shifts
{{ shiftLogCount }} logged · Sea Folks
Exceptions tonight
{{ auditCount }} logged · {{ auditVoidTotal }} voided
Voids, refunds, discounts, overrides and no-sale drawer opens. Written by the till, not editable from it.
{{ auditFlagLabel }}
{{ a.kindLabel }}
{{ a.staff }} · {{ a.table }} · {{ a.at }}
{{ a.reason }} — {{ a.note }}
{{ a.amountLabel }}
Usually open
{{ shiftTypicalOpen }} – {{ shiftTypicalClose }}
{{ shiftLogCount }} shifts{{ shiftTotalGross }} total
{{ sh.day }}
{{ sh.date }}● LIVE
{{ sh.span }} · {{ sh.dur }} · {{ sh.staff }}
{{ sh.grossLabel }}
{{ sh.orders }} orders

Every clock-in and close is logged here. Kibaz learns your real trading hours from this pattern — auto opening-hours coming.

My Photos
Menu hero
{{ heroBadge }}
{{ heroEarn }}
Tap a photo below — it leads the menu.
New photos {{ gpNewCount }} to classify

Off your pages until filed.

Gallery
Bin
Kept 30 days, then deleted from your pages
{{ p.dish }}{{ p.by }} · {{ p.left }}
{{ psState }} {{ psSrc }}
{{ psDish }} {{ psEarn }}
Leading now
{{ faTitle }}
Meter{{ faRate }}
AccruesDaily · credits monthly from today
StopsWhen you replace it · rest credits
{{ gcSrc }}
What's on this plate?{{ gcQueueLabel }}
{{ gpDishName }}
{{ gpDishSub }}
{{ gpLeadOrigin }} {{ gpLeadBy }}

Holds 7 — a new keep bumps the oldest. Bin: 30 days to recover.

My Menus
{{ myLiveLabel }}
Your menus · tap to edit
Admin only · tap ✕ twice
Modifiers
{{ g.count }}
{{ d.name }}
{{ d.priceLabel }} 86'd tonight
{{ d.desc }}
Jump to a section
Section settings
{{ ssSub }}
Section name
{{ ssNameCount }} / 22 · keep it short so it fits the section rail
{{ ssIcon }}
Chip icon
Fires
{{ ssFireHint }}

Deleting a section removes its dishes from this menu. Diners stop seeing them instantly.

Loyalty
Sea Folks · {{ loyaltyLiveLabel }}
Kibaz Loyalty{{ loyaltyMasterSub }}
Average billSets every amount at your size {{ avgBillLabel }}
Guardrails Kibaz law
Max off any bill
{{ maxPctLabel }}
Kibaz floor 20% · one table deal per bill · never cash out.
Diners earn these
Core
Fill quiet seats
Core
{{ veIcon }}
{{ veTitle }}Customised
{{ veReward }}
{{ f.label }}
↺ {{ f.stdLabel }}
{{ f.valueLabel }}
What the diner gets
Scratch to reveal
A surprise % off, just for coming back. Every diner is dealt a tier.
{{ w.pctLabel }}
SPIN
What the diner gets
Spin the wheel
One spin lands a live % off. The odds below set how often each slice hits.
Reward tiers & field results {{ veSentTotal }}
{{ t.convLabel }}Sweet spot
{{ t.sentLabel }} · {{ t.oddsLabel }}
{{ t.weightLabel }}
{{ veSweetLabel }}
When it runs
Off-peak isn't the same everywhere — set your own days and hours.
From {{ veFromLabel }}
To {{ veToLabel }}
Free-item choices
Pick the dish or dishes a featured photo can redeem for — {{ vePhotoCount }} · value {{ vePhotoRange }}
Milestones — a bonus at each step
Reward tenure: set a different value the longer they stay followed.
{{ st.monthLabel }}
{{ st.valueLabel }}
{{ ft.k }} {{ ft.v }}
Kibaz standard · scaled to your bill size
Tables & QR
{{ tqTotalLabel }}
▦
Table QR — {{ tqModeTitle }}
{{ tqModeDesc }}
Zones · tap ± to reshape the floor
{{ z.prefix }}
{{ z.name }}
{{ z.sub }}
{{ z.count }}
{{ z.rangeLabel }}
Tap a table to set its seats
{{ tqSelId }} seats {{ tqSelSeats }}
New zone
Tables get the zone's letter — add or trim them with ± after.

Each table's code is unique and carries its name — reprint after renaming. New tables appear on the floor board instantly; a seated table can't be removed.

Printers
Sea Folks · {{ onlineCount }}
Connected printers
{{ p.roleEmoji }}
{{ p.name }}
{{ p.role }} · {{ p.widthLabel }} · {{ p.routeLabel }}
{{ p.addr }}
Prints · tap sections to route

Network printers connect over your restaurant Wi‑Fi or LAN. Find the printer's IP on its self‑test slip, type it in, then send a test ticket to confirm it's wired to the right station.

Payment methods
Sea Folks · {{ payAcceptLabel }}

Choose what you accept at checkout. Switch off over‑the‑counter payment to run a digital‑only till — only the methods left on show on the payment screen.

{{ m.icon }}
{{ m.label }}
{{ m.sub }}
Keep at least one method on so staff can take payment.
Digital‑only till — no over‑the‑counter payments here.
Diners will see
{{ p.icon }} {{ p.label }} No methods enabled
Cash drawer on this terminal
{{ drawerSub }}
My store
Prints on every receipt

These details print at the top of every receipt. Your BRN and, if registered, your VAT number are required on a fiscal receipt in Mauritius.

Prints like this
{{ storeNameUpper }}
{{ store.address }}
{{ storeMetaLine }}
VAT {{ store.vatNo }}
— order & total print here —
{{ store.footer }}
Business Registration No. (BRN)
We look up your registered business name & address from the Corporate & Business Registration Dept. Edit them below if anything's changed.
Store nameFrom BRN
AddressFrom BRN
Phone
VAT number
Receipts print the VAT 15% breakdown and a sequential fiscal invoice number, and each is fiscalized with the MRA in real time (IRN + QR). Voids & refunds print credit notes — the sequence never has gaps. Kept 5 years.
Receipt footer message · optional
Charges
🥡
Takeaway charge
Flat fee added once per takeaway or delivery order. Per-dish box charges are set on each dish.
Amount · per order
Rs
On · {{ taSummary }} per takeaway & delivery order
Payments
What we accept at checkout
{{ m.icon }}
{{ m.label }}
{{ m.sub }}
Digital-only till — no over-the-counter payments here.
Keep at least one method on so staff can take payment.
🥡
Accept unpaid takeaway orders
Let trusted diners place takeaway orders without paying upfront — they settle at the till when they collect.
Min. past orders
{{ cashMinOrders }}
Min. acceptance
{{ cashMinAccept }}
Unpaid pickup allowed after {{ cashMinOrders }}+ orders & {{ cashMinAccept }} acceptance. New & low-trust diners prepay.
Online orders
Auto‑accept online orders
Orders are taken the moment they land and a ticket prints. The guest is told a ready time worked out from the queue, not a flat guess. You only step in when Kibaz can't honestly accept — a finished dish, an allergen clash, an unpaid first-timer, or an order big enough to re-time the kitchen.
On · tickets print to {{ ticketPrinterName }}
Add IP printer
A network printer on your Wi‑Fi or LAN
Printer name
IP address
Port
Station / role
Prints which sections
Only dishes from the selected sections print here. "All items" routes everything.
Paper width
Tip: print the printer's self‑test slip to find its IP. Default port for most receipt printers is 9100.
kibaz TERMINAL {{ nowDateLabel }} · {{ nowLabel }}
Who’s on?
Tap your name to clock in. {{ userCount }} people share terminal {{ deviceCode }}.
Switch user {{ nowDateLabel }}
{{ gateUserInitial }}
{{ gateUserName }}
{{ gateUserRole }}
Wrong code — try again
Enter your 6-digit code
Terminal {{ deviceCode }}
Set up this terminalJoin or reset your access
{{ qrBig }}
Open your phone camera or WhatsApp and scan this code. It opens a chat with the device code {{ deviceCode }} — finish setting up your account there.
Simulates scanning the link on your phone
Kibaz
Business account · online
Messages are end-to-end encrypted
{{ m.text }}
Today's menu
{{ nowDateLabel }} {{ shiftAvailCount }}/{{ shiftTotalCount }} on
{{ g.cat }}
{{ d.name }}
Float in the drawer
Users & access
{{ userListCount }} people on this terminal
Everyone signs in on the lock screen with their own 6-digit code. Invites go out over WhatsApp with a one-time code.
{{ u.initial }}
{{ u.name }}{{ u.role }}Wants to join
{{ u.codeMasked }}·{{ u.phone }}
Invite a user
They get a 6-digit code over WhatsApp
Name
WhatsApp number
Role
Admins can manage users, menu, payments & close the till. Staff take orders only.
Edit user
Rename this team member
Name
{{ tillTitle }}
{{ tillSub }} · {{ nowDateLabel }}
Kitchen closed · no open orders
Sales captured automatically · nothing to count
Z-report prints on close
Count the drawer
Cash counted, float included
{{ storeName }}
Z-REPORT · {{ nowDateLabel }}
{{ openedAt }}–{{ nowLabel }} · {{ staffName }}
Orders{{ tillOrderCount }}
Gross sales{{ tillGross }}
of which VAT 15%{{ tillVat }}
CASH — DRAWER
Float at open{{ floatOpenLabel }}
Cash sales{{ tillCash }}
Counted{{ countedLabel }}
{{ varianceWord }}{{ varianceLabel }}
CAPTURED — AUTOMATIC
Card{{ tillCard }}
Wallet{{ tillWallet }}
Captured{{ tillCapturedTotal }}
Printed {{ nowLabel }} · KB-07 · {{ staffName }}
{{ counterTitle }} {{ counterTotal }}
{{ d.label }} {{ d.qty }}
Users & access
{{ userListCount }} people on this terminal
Everyone signs in on the lock screen with their own 6-digit code. Invites go out over WhatsApp with a one-time code.
{{ u.initial }}
{{ u.name }}{{ u.role }}Wants to join
{{ u.codeMasked }}·{{ u.phone }}
Invite a user
They get a 6-digit code over WhatsApp
Name
WhatsApp number
Role
Admins can manage users, menu, payments & close the till. Staff take orders only.
Edit user
Rename this team member
Name
● Restricted
Kibaz Operator Console
First-time setup. This terminal must be activated by a Kibaz (Posterita) admin before it can take orders.
This terminal's code
{{ opTerminalCode }}
Identifies device {{ opDeviceCode }}
Send this code from the Kibaz admin WhatsApp. We'll reply with a one-time code to confirm it's you.
Posterita admin only · every action is signed & audited
One-time code
We replied to the Kibaz admin WhatsApp with a 6-digit code. Type it below.
Enter the 6-digit code from WhatsApp.
Demo code: any 6 digits
Kibaz Operator
Terminal {{ opDeviceCode }} · {{ opAuthIdLabel }}
audited
Current pairing
{{ opLinkedInitial }}
{{ opLinkedTo }}
Provisioned · synced · live orders
Linked
📦
Not linked
Unprovisioned · ready to pair
Provisioning actions
Reset terminal
Terminal {{ opDeviceCode }}
Reset & unpair from {{ opLinkedTo }}?
This returns {{ opDeviceCode }} to an unprovisioned state so it can be handed to another merchant. It can't be undone from the device.
Wiped from this device
Open checks & today's till
Staff PINs & clock-ins
Cached menu, prices & loyalty rules
Printer & payment configuration
{{ opLinkedTo }}'s historical sales stay safe in the Kibaz cloud — only this device is wiped.
Link to a merchant
Pairing terminal {{ opDeviceCode }}
Select a merchant to continue
{{ opDeviceCode }} linked to {{ opLinkedTo }}
The terminal reboots into {{ opLinkedTo }}'s service board. Their team can clock in and start taking orders — receipts now print under {{ opLinkedTo }}.
📦
Terminal reset
{{ opDeviceCode }} is wiped and unprovisioned. Pair it to the next merchant now, or hand it over for self-setup by WhatsApp.
{{ printerToast }}
D
Sea Folks
Kibaz Terminal · {{ actingAs }}
Offline · queuing
Service
Kitchen display
Today
Terminal
86 a dish
Greys out for every diner instantly · back on when you flip it
{{ g.cat }}
{{ d.name }}
{{ csTitle }}
Name and mobile — for the ready call.
+230
{{ msName }}
{{ g.name }}
Cancel {{ cancelAskName }} — why?
The reason goes to the guest as the message.
{{ bfTitle }}
Day
Party
Session
Time
Guest
+230
Mobile — for call-backs and the confirmation.
Note
{{ bfSummary }}
Table
{{ bfFreeLine }}
{{ bfSeatWarn }}
No tables free · Pick another time
{{ edTitle }}
Dish name
Description
Price
Rs
Section
Modifiers
{{ edModSummary }}
{{ g.name }}{{ g.optsPreview }} {{ g.ruleLabel }}
Takeaway
Price
Rs
Pack instruction
Shows on the kitchen ticket for takeaway & delivery.
🥡Takeaway packaging fee is off for this store. Turn it on in My store › Charges to charge per dish.
{{ meTitle }}
Shown on the dish when diners add it
Start from a preset
Group name
How many can they choose?

{{ meRuleHelp }}

Options

Name each one, and an optional add-on price. Leave price blank for free.

+Rs
{{ camDishName }}
Centre the dish in the frame
Live camera isn't available in this preview. On the real Kibaz handheld this is the viewfinder — or pull a photo from the device now.
The Kibaz handheld, orders-first. A table's order shows as rounds (from QR + waiters); tap any round to review, add late extras, then review the final bill and take payment. Close captures the number / prints the claim QR.
Spec · for Claude Code

Auto-fire & accept flow

How an incoming online order (takeaway / delivery) is handled when the terminal is busy or unattended. Dine-in rounds are excluded — those are always staff-fired.

Timeline (per online order)
  1. T+0s — auto-print. If venue autoAccept is on, the kitchen ticket prints immediately and the order shows “Auto-accepted · ticket printed → kitchen · unread”. Cooking never waits on a human.
  2. T+~60s unattended — escalate. If still unconfirmed, the card jumps to the top, turns red (“Confirm now”), and the terminal should sound/buzz.
  3. T+~3min unattended — auto-confirm. The order auto-confirms with a default ETA (≈15 min), pushed to the guest (“ Unread — auto-confirmed ~15 min”), so they're never left hanging.

In this prototype the thresholds are compressed to ~1 min (escalate) / ~2 min (auto-confirm) so they're observable; ship with ~60s / ~3min and make both configurable per venue.

Staff confirm = a promise, not “I read it”

Tapping Confirm & set time opens an ETA picker (~10/15/20/30 min). The chosen ETA is stored in acceptedEta[id] and pushed to the guest. Auto-confirm uses the default ETA instead.

Ready signal is staff-driven (no KDS)

There's no kitchen display pushing "ready", so the order can't mark itself. After confirm it sits as Cooking with a countdown to the promised time; when that time passes it flips to a red Due now — ready? self-reminder. Either way the action is Mark ready (type:"ready" → sets readyMarked[id], pings the guest "come collect"), then the card offers Hand over to close. This replaces the old "Chase kitchen" — chasing an anonymous kitchen made no sense on a single terminal.

Snooze only hides a card temporarily (snoozed[key] wake-tick); it auto-wakes, and tapping a snoozed card wakes it immediately so you can still Mark ready. Nothing is ever stuck off-board.

Out of stock → name the item

From Contact guest → An item's out of stock, staff pick which exact line from that order; the guest gets a WhatsApp naming that item and asking to swap or refund it. Never a generic “something's out.”

Guardrails
  • Guest orders fire on arrival — no accept step; staff act only to refuse (“Sort it out” / decline). Staff-taken rounds NEVER send themselves — the waiter fires.
  • Respect opening hours / kitchen pause: when closed, don't auto-accept — bounce back to the guest as “can't take it right now.”
  • autoAccept is a per-venue toggle (POS → Online orders). Off = every order needs a manual Accept.
  • Auto-confirm promises food you may not have — always pair with the out-of-stock recall above.
State fields (reference)

autoAccept:bool · autoConfirmed:{id:true} · acceptedEta:{id:min} · pendingEta:min · escalate@~60s · autoConfirm@~3min (default 15min)

Keys
Drive the till without looking down. Scanners work anywhere — a burst of digits and Enter adds the dish.
{{ k.label }} {{ k.what }}